package org.lc.platform.base.util;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;

public class SmEncryptUtil {

    /**
     * SM4 对称加密KEY
     * 注意 必须16 位字符
     * 由于防止被修改故在代码里面写死
     */
    private static final String KEY = "KeyMustBe16Size.";

    /**
     * 指明加密算法和秘钥
     */
    static SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", KEY.getBytes());

    /**
     * 加密为16进制，也可以加密成base64/字节数组
     */
    public static String encryptSm4(String plaintext) {
        if (StrUtil.isBlank(plaintext)) {
            return "";
        }
        return sm4.encryptHex(plaintext);
    }

    /**
     * 解密
     */
    public static String decryptSm4(String ciphertext) {
        if (StrUtil.isBlank(ciphertext)) {
            return "";
        }
        try {
            return sm4.decryptStr(ciphertext);
        } catch (Exception ignored) {
        }
        return ciphertext;

    }

    /**
     * 单向加密
     */
    public static String passWordEncrypt(String ciphertext) {
        if (StrUtil.isBlank(ciphertext)) {
            return "";
        }
        return SmUtil.sm3(ciphertext);
    }
}
